package dse.modules;

import java.util.Map;

import dse.DseException;
import dse.ExperimentConfiguration;

/**
 * The general interface all modules must adhere to.  The only additional 
 * constraint is that they must have a no-argument public constructor.
 * 
 * @author Aaron
 */
public interface Module {
	/**
	 * After a module is created using reflection this is called to initalize
	 * it.  So, this will be called after the module class has been constructed
	 * (using reflection to call its mandatory no-argument constructor), but 
	 * before any of the modules specific methods.
	 * 
	 * @param systemSettings	System wide settings and information.
	 * @param moduleSettings	Setting information specific to this module.
	 */
	void initalize (
			ExperimentConfiguration systemSettings, 
			Map<String, String> moduleSettings
			)
	throws DseException;
}
